#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N=2e5+10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
int f[2005][2005];//a第i个字符和b第j个字符相等时,这时候要把前面到i,j的所有字符串变为想的的最小步数
int main()			
{
	close();
	string s,t;
	cin>>s>>t;
	s=" "+s;t=" "+t;

	for(int i=1;i<=s.size();i++) f[i][0]=i;//s前i个字符,t前0个字符相等,这时候变到相等的最小情况为i
	for(int i=1;i<=t.size();i++) f[0][i]=i;

	for(int i=1;i<=s.size();i++)
	{
		for(int j=1;j<=t.size();j++)
		{
			if(s[i]==t[j]) f[i][j]=f[i-1][j-1];//相等时不变化,由于i的下标从0开始,所以开始" "+s变成1开始 
			else f[i][j]=min({f[i-1][j],f[i][j-1],f[i-1][j-1]})+1;
			//分别对应(1删除a的当前i,后面+1是消耗步数),(2在i位置添加与j相同的字符),(3当前i变成当前j)
		}
	}
	cout<<f[s.size()][t.size()];
	return 0;
}